<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
    <title>What's New</title>
    <style type="text/css">
        body
        {
            color: #000000;
            font-family: Arial;
            font-size: 75%;
        }
        a
        {
            font-family: Arial;
            text-decoration: none;
        }
        code
        {
            color: #b22222;
            font-family: Courier New;
        }
    </style>
</head>
<body>
    <h3>
        2.1 (${Date})</h3>
    <ul>
        <li><strong>Bugs</strong>:
            <ul>
                <li><a href="http://dotnetinstaller.codeplex.com/workitem/10280">#10280</a>: UI displayed 
                    briefly if auto_close_if_install set.</li>
                <li><a href="http://dotnetinstaller.codeplex.com/workitem/10270">#10270</a>: Run key not 
                    deleted on restart.</li>
            </ul>
        </li>
    </ul>
    </ul>
    <h3>
        2.0 (9/27/2011)</h3>
    <ul>
        <li><strong>Features</strong>:
            <ul>
                <li><a href="http://dotnetinstaller.codeplex.com/workitem/8318">#8318</a>: Added support
                    for hex values in <code>returncodes_success</code> and <code>returncodes_reboot</code>.
                    To specify a hex number start it with 0x.</li>
                <li><a href="http://dotnetinstaller.codeplex.com/workitem/7968">#7968</a>: Support elevation
                    as a subsequent command within the bootstrapper. First UI shows un-elevated, but
                    clicking install elevates.</li>
                <li><a href="http://dotnetinstaller.codeplex.com/workitem/8005">#8005</a>: Added a new
                    os_filter type 'greater than' (+) and 'less than' (-).</li>
                <li><a href="http://dotnetinstaller.codeplex.com/workitem/6289">#6289</a>: Added a new
                    setup bootstrapper, htmlInstaller, driven by an HTML-based UI engine.</li>
                <li><a href="http://dotnetinstaller.codeplex.com/workitem/6618">#6618</a>: Added <code>
                    #STARTPATH</code>, <code>#STARTEXE</code> and <code>#STARTFILENAME</code> substitution
                    variables.</li>
                <li><a href="http://dotnetinstaller.codeplex.com/workitem/6955">#6955</a>: Added <code>
                    #OSLANGID</code> substitution variable, operating system language ID.</li>
                <li><a href="http://dotnetinstaller.codeplex.com/workitem/6620">#6620</a>: Added <code>
                    #OSLOCALE</code> substitution variable, operating system ISO language and region
                    (eg. <code>en-US</code>).</li>
                <li><a href="http://dotnetinstaller.codeplex.com/workitem/6956">#6956</a>: <code>#LANGID</code>
                    and <code>#LANGUAGE</code> are always set to the value in the currently executing
                    configuration. <code>#LANGUAGE</code> may be empty, while <code>#LANGID</code> will
                    default to the operating system value.</li>
                <li><a href="http://dotnetinstaller.codeplex.com/workitem/6604">#6604</a>: InstallerEditor
                    no longer needs a configuration file to link a bootstrapper and the configuration
                    does not need to be saved before creating an exe.</li>
                <li><a href="http://dotnetinstaller.codeplex.com/workitem/6798">#6798</a>: InstallerEditor
                    will display file names when embed files are missing during linking.</li>
                <li><a href="http://dotnetinstaller.codeplex.com/workitem/4884">#4884</a>: InstallerEditor
                    will notice that a configuration file has changed on disk and offer to reload it.</li>
                <li><a href="http://dotnetinstaller.codeplex.com/workitem/6786">#6786</a>: Bootstrapper
                    will return a 3010 exit code when a reboot was required.</li>
                <li><a href="http://dotnetinstaller.codeplex.com/workitem/6786">#6786</a>: Added <code>
                    /noreboot</code> to the bootstrapper to suppress actual reboot when required. Bootstrapper
                    will simply return a 3010 exit code in this case.</li>
                <li><a href="http://dotnetinstaller.codeplex.com/workitem/7004">#7004</a>: The user-defined
                    browse control will always return paths without the trailing backslash except for
                    drive paths (eg. <code>C:\</code>).</li>
                <li><a href="http://dotnetinstaller.codeplex.com/workitem/6730">#6730</a>: InstallerEditor
                    displays a <code>*</code> next to field names that are required and displays an
                    error if the user tries to delete the value.</li>
                <li><a href="http://dotnetinstaller.codeplex.com/workitem/7148">#7148</a>: Added support
                    for Windows 2008 SP2 and Windows 7 SP1.</li>
                <li><a href="http://dotnetinstaller.codeplex.com/workitem/7252">#7252</a>: Enabled Visual
                    Styles: modified default manifests with a dependency on <code>Microsoft.Windows.Common-Controls
                        6.0</code>.</li>
                <li><a href="http://dotnetinstaller.codeplex.com/workitem/7382">#7382</a>, 
                    <a href="http://dotnetinstaller.codeplex.com/workitem/9000">#9000</a>: Added <code>
                    disable_wow64_fs_redirection</code> at setup configuration and component level to
                    run native x64 Windows applications and installation packages(cmd, regedit, msi, msp, etc) 
                    from dotNetInstaller.</li>
                <li><a href="http://dotnetinstaller.codeplex.com/workitem/7916">#7916</a>: Added MUI
                    support with <code>MuiUser</code> (preferred language set for the user) and <code>MuiSystem</code>
                    (preferred language set for the system) options in configuration <code>lcidtype</code>.</li>
                <li><a href="http://dotnetinstaller.codeplex.com/workitem/8277">#8277</a>: Language
                    selector dialog in dotNetInstaller will automatically select the operating system
                    language if available.</li>
                <li><a href="http://dotnetinstaller.codeplex.com/workitem/8256">#8256</a>: Added <code>
                    /noRunOnReboot</code> to the bootstrapper to suppress actually writing the RunOnReboot
                    registry key.</li>
                <li><a href="http://dotnetinstaller.codeplex.com/discussions/272583">#272583</a>: Added
                    support for Windows 8.</li>
            </ul>
        </li>
        <li><strong>Misc</strong>:
            <ul>
                <li><a href="http://dotnetinstaller.codeplex.com/workitem/7575">#7575</a>: Upgraded
                    to SandCastle 1.9.3.0 documentation builder.</li>
                <li><a href="http://dotnetinstaller.codeplex.com/workitem/7672">#7672</a>: Outputing
                    running nunit test case name to console.</li>
                <li><a href="http://dotnetinstaller.codeplex.com/workitem/7673">#7673</a>: Checked in
                    *.*proj files with TFS bindings and add associated vspscc files.</li>
                <li><a href="http://dotnetinstaller.codeplex.com/workitem/7151">#7151</a>: InstallerEditor
                    example links in component wizard use <code>example.com</code> instead of <code>yourwebsite.com</code>,
                    which is a real site.</li>
                <li><a href="http://dotnetinstaller.codeplex.com/workitem/8081">#8081</a>: Dni.sln build
                    fails if a Sample Configuration.xml file is read-only.</li>
                <li><a href="http://dotnetinstaller.codeplex.com/workitem/8084">#8084</a>: Moved commands
                    in build.cmd to dni.proj.</li>
                <li><a href="http://dotnetinstaller.codeplex.com/workitem/8126">#8126</a>: Added and
                    using NUnit binaries in ThirdParty instead of what is installed in "Program Files".</li>
                <li><a href="http://dotnetinstaller.codeplex.com/workitem/8696">#8696</a>: Upgraded
                    to Wix 3.5 and using binaries in ThirdParty instead of what is installed in "Program
                    Files".</li>
            </ul>
        </li>
        <li><strong>Bugs</strong>:
            <ul>
                <li><a href="http://dotnetinstaller.codeplex.com/workitem/8143">#8143</a>: Full UI not
                    displayed after reboot.</li>
                <li><a href="http://dotnetinstaller.codeplex.com/workitem/7493">#7493</a>: Windows Defender
                    blocks DNI upon restart. See <a href="http://dotnetinstaller.codeplex.com/workitem/7968">
                        #7968</a>.</li>
                <li><a href="http://dotnetinstaller.codeplex.com/workitem/6758">#6758</a>: MSI components
                    with paths equal to a length of a GUID fail to install.</li>
                <li><a href="http://dotnetinstaller.codeplex.com/workitem/6816">#6816</a>: 0x8007064a:
                    MsiEnumProducts - The configuration data for this product is corrupt.</li>
                <li><a href="http://dotnetinstaller.codeplex.com/workitem/6352">#6352</a>: 0x80070645:
                    MSIGetProductInfo - This action is only valid for products that are currently installed.</li>
                <li><a href="http://dotnetinstaller.codeplex.com/workitem/6788">#6788</a>: Splash screen
                    broken in basic UI mode.</li>
                <li><a href="http://dotnetinstaller.codeplex.com/workitem/6805">#6805</a>: A component
                    with no installed checks is not installed if <code>/x</code> is specified on the
                    command line.</li>
                <li><a href="http://dotnetinstaller.codeplex.com/workitem/7155">#7155</a>: <code>ProductVersion</code>
                    is not automatically written to the <code>OSVERSIONINFO</code> string table when
                    available.</li>
                <li><a href="http://dotnetinstaller.codeplex.com/workitem/7224">#7224</a>: License file
                    for <code>ControlLicense</code> user-defined controls is left in <code>%TEMP%\GUID</code>
                    after installation.</li>
                <li><a href="http://dotnetinstaller.codeplex.com/workitem/7567">#7567</a>: If InstallerEditor
                    is closed minimized it will not correctly restore its position and will not appear
                    on the screen when restarted.</li>
                <li><a href="http://dotnetinstaller.codeplex.com/workitem/7565">#7565</a>: Dni does
                    not automatically change into uninstall mode if an optional component is not installed.</li>
                <li><a href="http://dotnetinstaller.codeplex.com/workitem/7557">#7565</a>: Dni will
                    incorrectly display installation_completed message if auto_close_if_installed=true
                    and not all components installed successfully.</li>
                <li><a href="http://dotnetinstaller.codeplex.com/workitem/7578">#7578</a>: Updated documentation
                    to indicate that an elevated command prompt is required to build the project in
                    the development environment.</li>
                <li><a href="http://dotnetinstaller.codeplex.com/workitem/7601">#7601</a>: Complete
                    command may not execute with optional components.</li>
                <li><a href="http://dotnetinstaller.codeplex.com/workitem/8203">#8203</a>: dotNetInstaller
                    may hang with the component installing or extracting progress bar.</li>
                <li><a href="http://dotnetinstaller.codeplex.com/workitem/8697">#8697</a>: <code>status_not_installed</code>
                    doesn't show when defined at the component level.</li>
            </ul>
        </li>
    </ul>
    <h3>
        1.10 (7/12/2010)</h3>
    <ul>
        <li><strong>Features</strong>:
            <ul>
                <li>Added support for executable components with an optional response file and installation
                    directory.</li>
                <li>Added <code>has_value_disabled</code> option to user-defined controls.</li>
                <li><code>Install</code>, <code>Cancel</code> and <code>Skip</code> buttons now disabled
                    during install/uninstall.</li>
                <li>Added <code>dialog_default_button</code> that specifies the default button for the
                    main dialog (one of cancel, install or skip).</li>
                <li>Added <code>File -&gt; Recent Files</code> menu to Installer Editor that lists the
                    last 10 configuration files opened.</li>
                <li>InstallerEditor window will remember its size, position and the size of the configuration
                    tree and attribute comments.</li>
                <li>InstallerEditor Make Exe window remembers all its contents.</li>
                <li>Added <code>os_filter</code> that behaves like <code>lcid_filter</code> for operating
                    system IDs.</li>
                <li>Replaced <code>os_filter_greater</code> and <code>os_filter_smaller</code> with
                    <code>os_filter_min</code> and <code>os_filter_max</code> that include boundaries
                    and use literals instead of numbers.</li>
                <li>Added <code>show_progress_dialog</code> at setup configuration and component level,
                    controls whether to show the component install progress dialog.</li>
                <li>Added <code>show_cab_dialog</code> at setup configuration and component level, controls
                    whether to show the CAB extraction progress dialog.</li>
                <li>Added user-defined image control.</li>
                <li>Holding the keyboard Control key and double-clicking on a bootstrapper component
                    will install it, regardless of whether the component is selected or not.</li>
                <li>Holding the keyboard Shift key and double-clicking on a bootstrapper component will
                    toggle it's selected state, regardless of whether the component is required or not.</li>
                <li>Unicows.dll embedding is now optional. Specify <code>/Mslu+</code> on the InstallerLinker
                    command line if you plan to run your setup on Windows 95 and 98 platforms.</li>
                <li>Replaced components' <code>selected</code> by <code>selected_install</code> and
                    <code>selected_uninstall</code>.</li>
                <li>Replaced components' <code>required</code> by <code>required_install</code> and
                    <code>required_uninstall</code>.</li>
                <li>Added <code>/ProcessorArchitecture:list</code> to InstallerLinker to link an installer
                    targeting a specific platform architecture.</li>
                <li>Removed configuration-level <code>allow_continue_on_error</code> that confused component
                    logic.</li>
                <li>Added <code>default_allow_continue_on_error</code> to components. Sets the default
                    value of the selection when <code>allow_continue_on_error</code> is set to True.
                    In UI mode, sets the default dialog selection for the prompt. In silent mode allows
                    to continue on failure.</li>
                <li>Added <code>reload_on_error</code> to setup configuration. Controls whether to reload
                    the components list after a component error has occurred. Unlike previous versions,
                    default is set to True.</li>
                <li>Allowing empty <code>failed_exec_command_continue</code> messages. When both the
                    configuration-level and component-level messages are empty, the user is not prompted
                    with a question to continue and the value of <code>default_continue_on_error</code>
                    is used to make the decision to continue or abort.</li>
            </ul>
        </li>
        <li><strong>Misc</strong>:
            <ul>
                <li>Added application compatibility entries for Windows Vista and Windows 7 in the default
                    dotNetInstaller.exe.manifest.</li>
            </ul>
        </li>
        <li><strong>Bugs</strong>:
            <ul>
                <li>Bug: user-defined controls that contain a hyperlink, such as license agreement,
                    may render as overlapped black text behind link.</li>
                <li>Bug: <code>mustreboot</code> component option is broken.</li>
                <li>Bug: Windows XP 64-bit incorrectly identified as Windows 2003 Server R2.</li>
            </ul>
        </li>
    </ul>
    <h3>
        1.9 (4/5/2010)</h3>
    <ul>
        <li><strong>Features</strong>:
            <ul>
                <li>Added support for Windows Installer Patches (MSP) with an "msp" component type.</li>
                <li>Added <code>#UILEVEL</code> variable, current installer UI level, one of "full",
                    "silent" or "basic".</li>
                <li>Added <code>#LANGUAGE</code> and <code>#LANGID</code> variables, current configuration
                    language and locale id.</li>
                <li>Added <code>uninstall_display_name</code> to all components, optional component
                    display name during uninstall.</li>
                <li>Added <code>uninstall_package</code> to <code>msi</code> components, optional package
                    to use during uninstall.</li>
                <li>Added <code>uninstallation_none</code>, <code>uninstallation_completed</code> and
                    <code>uninstalling_component_wait</code> to setup configurations.</li>
                <li>Added support for multiple registry paths in <code>@[registry path]</code> substitutions.
                    Separate multiple paths with a <code>|</code> character.</li>
                <li>A default value is no longer required in registry substitutions, assumed blank.</li>
                <li>Added optional installed checks for user-defined controls. The check must evaluate
                    to <code>True</code> for the control to be displayed, enabled or both, depending
                    on the value of the new <code>check</code> option.</li>
                <li>Added <code>defaultvalue</code> options to <code>registry</code>, <code>file</code>
                    and <code>product</code> installed checks. The default value is used when the bootstrapper
                    does not find the registry key or file, ie. it cannot decide whether the component
                    is installed based on the specifics of the check (eg. version comparison with a
                    value that doesn't exist is not meaningful).</li>
                <li>Added <code>selected</code> option to components to select or de-select a component
                    by default.</li>
                <li>Added <code>key_exists</code> and <code>value_exists</code> operators to registry
                    installed checks. The <code>value_exists</code> operator allows one to check whether
                    the default registry key value is set.</li>
            </ul>
        </li>
        <li><strong>Misc</strong>:
            <ul>
                <li><code>/DisplayCab</code> truncates the files list for each cub at two items; rest
                    is shown as a summary.</li>
                <li>Failures to read or write embedded resources, including CABs, CAB directory, banner
                    and manifest, reports the file name affected by the error.</li>
                <li>Documented uninstall strategy for MSIs by remembering the product GUID in registry
                    under the "Install and Uninstall Sequences" section.</li>
                <li>Substantially improved peformance linking large bootstrappers with many embedded
                    files and components.</li>
                <li>Implemented work-around for "not enough storage space" system error while embedding
                    large CABs.</li>
            </ul>
        </li>
        <li><strong>Bugs</strong>:
            <ul>
                <li>MSI components ignore <code>uninstall_cmdparameters</code>, <code>uninstall_cmdparameters_silent</code>
                    and <code>uninstall_cmdparameters_basic</code>.</li>
                <li>MSU components don't property handle reboots with standard 3010 exit code.</li>
                <li>Extracting files from large embedded CABs with many files may not extract all files.</li>
                <li>Uninstall doesn't remove components and process configurations in reverse order.</li>
                <li>Progress status and labels encode &amp; characters as key access indicators instead
                    of rendering them as is.</li>
                <li>CMD components don't property reload <code>command_basic</code> and <code>uninstall_command_basic</code>
                    in InstallerEditor.</li>
                <li>InstallerEditor "Save" menu is not re-enabled after "Save As".</li>
                <li>Registry install checks with the <code>exists</code> operator for a blank field
                    value fail with a "The system cannot find the file specified." error.</li>
            </ul>
        </li>
    </ul>
    <h3>
        1.8 (1/20/2010)</h3>
    <ul>
        <li><strong>Features</strong>:
            <ul>
                <li>Added support for uninstall sequences with new command-line <code>/i</code> and
                    <code>/x</code> switches, <code>supports_install</code>, <code>supports_uninstall</code>
                    global options in configurations, components and controls. Added extended uninstall
                    parameters in <code>cmd</code> and <code>msi</code> components.</li>
                <li>Added user-defined form controls and input for labels, checkboxes, edit boxes, hyperlinks
                    and file/directory browse controls.</li>
                <li>Added user-defined splash screen embedded with the InstallerLinker <code>/Splash</code>
                    option and an optional <code>/nosplash</code> switch to dotNetInstaller.</li>
                <li>dotNetInstaller: Added <code>/controlArgs "control id":"value"</code> to dotNetInstaller.exe
                    command line to override initial control values.</li>
                <li>Added <code>returncodes_reboot</code> to <code>cmd</code> components that specify
                    which return code(s) should be treated as a required reboot.</li>
                <li>Added <code>returncodes_success</code> to <code>cmd</code> components that specify
                    a list of comma-separated return code(s) that should be treated as success. Specify
                    "all" to create a component that doesn't fail based on its return code and specify
                    <code>!value</code> to treat all return codes except a single value as success.</li>
                <li>Added splash and manifest input to InstallerEditor's Make Exe dialog.</li>
                <li>Added support for a license agreement checkbox user-defined control.</li>
                <li>Added <code>dialog_message_copying</code> that displays instead of <code>dialog_message_downloading</code>
                    when the file is copied from <code>sourcepath</code>.</li>
                <li>The <code>dialog_message_downloading</code> and <code>dialog_message_copying</code>
                    replace <code>dialog_message</code> in download dialogs depending on whether a download
                    or a local copy is required.</li>
                <li>Added component <code>id</code> and renamed <code>description</code> to <code>display_name</code>.</li>
                <li>ComponentArgs now accepts <code>*</code>, <code>id</code> or <code>display_name</code>,
                    cumulative in this order.</li>
                <li>Added <code>clear_cache</code> to download components. When true, attempts to clear
                    the local internet cache entry for the url to download.</li>
                <li>Cabbing now embeds files that belong in components in separate resource streams,
                    extracting only those files that are necessary for installation of a particular
                    component. Embedded files outside of components continue to always be extracted.</li>
                <li>Changed default of <code>/EmbedResourceSize &lt;size in bytes&gt;</code> from 32MB
                    to 128MB.</li>
                <li>CAB extraction uses the memory-mapped resource streams and no longer writes temporary
                    files to extract embedded components. This significantly reduces disk space and
                    memory requirements and improves extraction speed.</li>
                <li>InstallerEditor now accepts a configuration file on the command-line and opens it.
                    You can also pass /? for command-line usage and success/failure return codes are
                    documented.</li>
                <li>InstallerEditor: added "Edit" menu with identical contents as the right click popup
                    on the currently selected configuration node.</li>
            </ul>
        </li>
        <li><strong>Bugs</strong>:
            <ul>
                <li>Bug: error creating temporary directory on Windows 95/98/ME.</li>
                <li>Bug: combining #PATH variables produces inconsistent backslash count for different
                    path types, which causes component execution failure on Windows 95/98/ME.</li>
                <li>Bug: component lcid filters broken.</li>
                <li>Bug: product installed checks may produce Error in ::IIDFromString: The parameter
                    is incorrect.</li>
                <li>Bug: adjusting X or Y coordinates of UI widgets doesn't preserve widget's width
                    or height.</li>
                <li>Bug: embedfolder nested within a component broken.</li>
                <li>Bug: download dialog will no longer appear when neither download nor copy is not
                    required.</li>
                <li>Bug: file and registry (DWORD and REG_SZ) version checks <code>version_lt</code>,
                    <code>version_gt</code>, <code>version_le</code> and <code>version_ge</code> are
                    broken: their results are inverted; if you have been using these checks, review
                    the documentation and adjust the check conditions.</li>
                <li>Bug: InstallerEditor's Make Exe dialog is closed when the user presses Cancel when
                    prompted for a target .exe file name.</li>
            </ul>
        </li>
        <li><strong>Misc</strong>:
            <ul>
                <li>Added 3rd party licensing information to documentation.</li>
            </ul>
        </li>
    </ul>
    <h3>
        1.7 (9/30/2009)</h3>
    <ul>
        <li><strong>Features</strong>:
            <ul>
                <li>Added OS filter identifiers for Windows Vista SP2, Windows Server 2003 R2, Windows
                    Server 2008 R2 and Windows 7.</li>
                <li>Extended registry search REG_MULTI_SZ semantics. You can now specify a comma-delimited
                    list of values to <code>match</code> exactly all values, <code>contains</code> to
                    match a subset of values and you can no longer specify a broken <code>version</code>
                    match.</li>
                <li>Added support for nested reference configurations. Each downloaded configuration
                    file is checked for more reference configurations. There's a nested depth limit
                    of 10 to avoid circular references.</li>
                <li>Added <code>/DisplayCab</code> command line option to dotNetInstaller.exe that displays
                    the embedded CAB file contents when available.</li>
                <li>Added <code>/DisplayConfig</code> command line option to dotNetInstaller.exe that
                    displays configurations and components.</li>
                <li>Added support for relative paths in MSI components by resolving paths before execution.</li>
                <li>Added <code>version_lt</code>, <code>version_le</code>, <code>version_gt</code>,
                    <code>version_ge</code> and <code>version_eq</code> functions to installed check
                    file and registry operators.</li>
                <li>Added support for <code>os_filter_smaller</code>, <code>os_filter_greater</code>
                    and <code>processor_architecture_filter</code> in web configurations.</li>
                <li>Added a product installed check that queries the MSI system database for a product
                    by it's product id or upgrade code and is capable of comparing product properties,
                    such as VersionString.</li>
                <li>Added an "msu" component type, similar to "msi" for Windows Update (.msu) packages.</li>
                <li>InstallerEditor and InstallerLinker no longer require elevation on Windows Vista
                    and Windows Server 2008.</li>
                <li>Unicows.dll is embedded and is no longer required for Windows 95 and 98 installers.
                    You can now distribute a single packaged setup for Windows 95 and 98 platforms.</li>
                <li>Added <code>/ConfigFile &lt;path\configuration.xml&gt;</code> option to the bootstrapper
                    to specify an alternate configuration file.</li>
                <li>dotNetInstaller process exit code is now 0 on success, process exit code is now
                    shell execute return code on an open file component failure, MSI return code on
                    an MSI component failure, process exit code on a non-zero cmd component return,
                    -2 on cancel from main dialog or download and -1 on any other error. Check <code>%ERRORLEVEL%</code>
                    in batch scripts.</li>
                <li>Added a directory exists installed check.</li>
                <li>Added <code>dialog_message_connecting</code> and <code>dialog_message_sendingrequest</code>
                    to download progress.</li>
                <li>Added <code>/?</code> or <code>/help</code> to the bootstrapper that shows the command
                    line syntax and options.</li>
                <li>Moved <code>log_enabled</code> and <code>log_file</code> options to the configuration
                    top level from individual install configurations.</li>
                <li>Added expansion of registry variables to configuration nodes in the format of <code>
                    @[KEY:OPTION\PATH\VALUE]</code> (eg. @[HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\CommonFilesDir]).</li>
                <li>Added expansion of environment variables to configuration nodes (eg. %TEMP%).</li>
                <li>All nodes in the configuration file, except boolean and strongly typed enumerations,
                    accept path (eg. #TEMPPATH), environment (eg. %TEMP%) and registry (eg. @[HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\CommonFilesDir])
                    variables.</li>
                <li>Added an optional user language selection dialog to the bootstrapper. Users can
                    pick amongst the languages available instead of choosing their locale or the one
                    of the operating system.</li>
                <li>Msi packages can now be GUIDs of installed products, in the {GUID} format. These
                    will not be resolved as a path.</li>
                <li>Added <code>/Manifest &lt;manifest file&gt;</code> to the installer linker to specify
                    a replacement manifest. This enables building bootstrappers that don't elevate on
                    Windows Vista, Server and Windows 7.</li>
                <li>Added <code>/EmbedResourceSize &lt;size in bytes&gt;</code> to installer linker
                    to specify the max size of each embedded resource. Defaults to 32Mb.</li>
                <li>Added <code>auto_start</code> setup configuration parameter that defines whether
                    to automatically start installation in full UI mode.</li>
                <li>Added <code>auto_continue_on_reboot</code> setup configuration parameter that defines
                    whether to auto-start installation after a reboot was forced during the installation.</li>
                <li>Added <code>reboot_cmd</code> setup configuration parameter that defines additional
                    command-line parameters to include in the reboot command-line.</li>
                <li>Added <code>wait_for_complete_command</code> that defines whether to detach the
                    complete command or to execute it synchronously and wait for the program to finish.
                    Default is true.</li>
            </ul>
        </li>
        <li><strong>Bugs</strong>:
            <ul>
                <li>Bug: wrong error when missing configuration.xml (invalid schema version vs. missing
                    configuration.xml).</li>
                <li>Bug: reference (web) configurations broken in the editor.</li>
                <li>Bug: wrong semantics of <code>auto_close_if_installed</code>. The bootstrapper will
                    now close after any successful installation session when this option is set.</li>
                <li>Bug: silent install failures pop up error dialogs that don't auto-close.</li>
                <li>Bug: EmbedFolder components broken when configuration is (re)saved with InstallerEditor.</li>
            </ul>
        </li>
        <li><strong>Misc</strong>:
            <ul>
                <li>Refactored the dotNetInstaller bootstrapper into a dotNetInstallerLib C++ library
                    and a GUI driver.</li>
                <li>Extended unit test coverage across C# and C++ installer and support tools libraries.</li>
            </ul>
        </li>
    </ul>
    <h3>
        1.6 (6/29/2009)</h3>
    <ul>
        <li>First release off <a href="http://www.codeplex.com/dotnetinstaller">CodePlex</a>,
            <a href="http://dotnetinstaller.codeplex.com">http://dotnetinstaller.codeplex.com</a>.</li>
        <li>New MSI installer. You can use the installer or a binary distribution package.</li>
        <li>New, largely rewritten, CHM documentation.</li>
        <li>Changed behavior of file embedding to explicit: disabled automatic embedding of
            files from <code>msi</code>, <code>download</code> and <code>openfile</code> components,
            set <code>/Embed</code> to <code>True</code> by default.</li>
        <li>Added an <code>EmbedFolder</code> configuration component to embed directories and
            subdirectories with an optional wildcard and configurable destination.</li>
        <li>Added parity between <code>EmbedFolder</code> and <code>EmbedFile</code> components
            which can be now specified in both the configuration and on the command line.</li>
        <li>InstallerLinker: embedded files that cannot be found are reported as errors with
            their full paths.</li>
        <li>InstallerLinker: Changed default value of <code>/AppPath</code>, now defaults to
            the current directory and not to the location of the configuration.xml.</li>
        <li>dotNetInstaller: embedded CABs are now segmented into 32-megabyte chunks. This reduces
            the minimum required memory for installers containing embedded CABs to about 48Mb,
            reduces paging and improves performance during extraction of large embedded CABs.
            Added editor and linker support for Windows Vista/XP 64.</li>
        <li>Added OS filter identifiers for Windows Server 2008.</li>
        <li>Added <code>InstalledCheckOperator</code> of 'And', 'Or' and 'Not' types that combine
            results from one or more <code>InstalledCheck</code> and <code>InstalledCheckOperator</code>
            elements.</li>
        <li>dotNetInstaller: Added <code>/componentArgs "component description":"parameters"</code>
            to dotNetInstaller.exe command line. This enables passing additional parameters
            to specific components declared in configuration.xml.</li>
        <li>InstallerEditor: added support for configuration file XML comments and a text box
            where the developer can edit a comment, saved as an xml comment above the selected
            node.</li>
        <li>InstallerEditor: configuration tree now supports deletion of nodes with the keyboard
            Delete key and will popup the Add menu with the Insert key.</li>
        <li>InstallerEditor: components can be dragged and dropped between nodes.</li>
        <li>InstallerEditor: the About box can be closed with the Escape key.</li>
        <li>InstallerEditor: added Expand All, Collapse All, Move, Move Up and Move Down context
            menu items.</li>
        <li>InstallerEditor: Shift+Up and Shift+Down arrows move components up and down.</li>
        <li>InstallerEditor: added support for multiline properties for most non-caption or
            button messages.</li>
        <li>InstallerEditor: added shortcuts to open a configuration file (Ctrl+O), create a
            new configuration file (Ctrl+N), save the current configuration (Ctrl+S), generate
            an exe (F10), exit (Alt+F4) and refresh (F5).</li>
        <li>InstallerEditor: user no longer prompted for a configuration file name on New.</li>
        <li>InstallerEditor: the New and Open menu items are always enabled.</li>
        <li>InstallerEditor: added a status strip that reports general information, including
            Save or Load.</li>
        <li>InstallerEditor: closing a configuration no longer prompts to save changes when
            there were no changes made.</li>
        <li>InstallerEditor: writes schema and generator version information to configuration.xml.</li>
        <li>Added <code>allow_continue_on_error</code> globally and per-component: when false
            user is no longer prompted to continue on error, instead the user is informed of
            the failure and installation aborts. Combine this option with <code>auto_close_on_error</code>
            to get predictable failure behavior as bootstrapper will close after an element
            of setup failed. Note that in order for a component to allow continuing on error
            both the global and the component setting must be set to True.</li>
        <li>DotNetInstaller: warns and offers the user to abort if configuration was not generated
            with a matching version of InstallerEditor.</li>
        <li>DotNetInstaller: merged functionality of the Advanced component selector into the
            main window, removed the Advanced button.</li>
        <li>Added <code>dialog_show_required</code>: when false, required components are hidden.</li>
        <li>Added <code>dialog_show_installed</code>: when false, installed components are hidden.</li>
        <li>Added <code>must_reboot_required</code>: globally and per-component. Setting this
            option to true will prevent users from continuing when a reboot is required.</li>
        <li>Added <code>failed_exec_command_continue</code> per-component extending the global
            setting that defines the message to show when a component fails to install.</li>
        <li>Added optional <code>reboot_required</code>: a message that can be configured per
            component, extending the global setting.</li>
        <li>Added <code>auto_close_on_error</code>: changes behavior on component error, now
            optionally closing the bootstrapper.</li>
        <li>Added a set of options that enable resizing of the main installer dialog elements:
            dialog_position <code>dialog_components_list_position</code>, <code>dialog_message_position</code>,
            <code>dialog_bitmap_position</code>, <code>dialog_otherinfo_link_position</code>,
            <code>dialog_osinfo_position</code>, <code>dialog_install_button_position</code>,
            <code>dialog_cancel_button_position</code> and <code>dialog_skip_button_position</code>.
            Supports resizing coordinates selectively.</li>
        <li>Added <code>configuration_no_match_message</code> that displays as error when no
            configuration matching operating system, locale or processor architecture filters
            has been found. Removed unused <code>os_filter_not_match_message</code> and <code>processor_architecture_filter_not_match_message</code>.</li>
        <li>Added <code>#SYSTEMWINDOWSPATH</code> constant resolved to system Windows directory
            in paths.</li>
        <li>Added <code>#PID</code> constant resolved to process ID in paths.</li>
        <li>Added <code>embed</code> option to msi, openfile and download (sub)components to
            disable automatic file embedding.</li>
        <li>Added <code>lcidtype</code> option to the configuration file that can be set to
            the method to use to obtain the current LCID used to match a configuration. Now
            supports user.exe (KB181604), system and user methods.</li>
        <li>Expanded <code>status_installed</code> and <code>status_notinstalled</code> per-component.</li>
        <li>Download dialog <code>autostartdownload</code> default value is changed to <code>
            true</code>.</li>
        <li>Added <code>sourcepath</code> to support mixed-mode physical media distribution
            scenarios where frequently required components are embedded and other components
            downloaded.</li>
        <li>dotNetInstaller process exit code is now 0 on success, MSI return code on an MSI
            component failure, process exit code on a non-zero cmd component return, -2 on cancel
            from main dialog and -1 on any other error. Check <code>%ERRORLEVEL%</code> in batch
            scripts.</li>
        <li>Silent install support was extended to a full UI, basic UI and no UI mode, silent
            install no longer pops up progress dialogs, while basic UI install does without
            requiring user interaction. All UI modes are enabled via configuration and can be
            overriden from command line with /q (silent), /qb (basic UI) and /nq (full UI).</li>
        <li>Hidden folders and files are no longer embedded.</li>
        <li>Added <code>installation_none</code>, displayed instead of <code>installation_complete</code>
            when no components were required.</li>
        <li>Bug: cancel has no effect on the download dialog before download starts.</li>
        <li>Bug: download dialog will no longer appear when download is not required.</li>
        <li>Bug: command-line parameters are not preserved on reboot.</li>
        <li>Bug: /ComponentArgs cannot contain a colon.</li>
        <li>Bug: errors in command line arguments aren't reported.</li>
        <li>Bug: dotNetInstaller doesn't report invalid command-line parameters.</li>
    </ul>
    <h3>
        1.5 (10/25/2008)</h3>
    <ul>
        <li>Added support for installing 64-bit applications, including WOW support for component
            installed checks, processor architecture restrictions per installation and/or component,
            etc.</li>
        <li>Added support for silent installs; silent mode can be declared either in the configuration
            XML or from the command line.</li>
        <li>Added command_silent to the component of type "command" and cmdparameters_silent
            to the component of type "msi" that optionally replace command and cmdparameters
            parameters in a silent install.</li>
        <li>Added an "alwaysdownload" configuration XML attribute to the download element; if
            this value is false, the file will not be download if it already exists locally
            (this enables using the same configuration XML for both online and offline installs).</li>
        <li>Modified configuration-level OS filter matching to be included as part of the configuration
            filter checks (previously, the program would exit if an unmatched configuration-level
            OS filter was encounter).</li>
        <li>Updated configuration element processing so that all valid configuration blocks
            (matching both OS and LCID filters) will be executed (previously, only the first
            matching block was executed).</li>
        <li>Added environment variable processing support to component commands where the component
            type is "cmd" or "msi".</li>
        <li>Modified complete_command handling so that dotNetInstaller will wait for Command_Complete
            to finish executing.</li>
        <li>Added complete_command_silent to allow overriding complete_command on silent install.</li>
        <li>Added OS filter identifiers for Windows XP SP3, Windows Server 2003 SP1, Windows
            Server 2003 SP2, and Windows Vista SP1.</li>
        <li>Added optional configuration-level and component-level OS filter matching system
            architecture (x86, x64, etc). See "processor_architecture_filter". This filter restricts
            the entire boostrapper from running on non-supported processors and enables installation
            of different dependencies on different processor architectures.</li>
        <li>Added CABing, embedding of support files using <a href="http://www.codeproject.com/KB/files/CABCompressExtract.aspx">
            Elmue's CAB library</a> and a PackagedSetup sample.</li>
        <li>Added an "Embed File" component, child of "configuration" and "component", to embed
            support files when /Embed is specified.</li>
        <li>Added /ExtractCab command line option to dotNetInstaller.exe that extracts the embedded
            CAB file and its contents in the current directory.</li>
        <li>Added InstallerLinker.exe with command line options /e (Embed) and /a (AppPath)
            and /v (Verbose) for using in build processes.</li>
        <li>Added /EmbedFile and /EmbedFolder command line options to InstallerLinker to embed
            individual files and folder structures.</li>
        <li>Added support for embedding an icon that can replace the default setup icon.</li>
        <li>Added "cab_dialog_message", "cab_cancelled_message", "cab_dialog_caption", "cab_path"
            and "cab_path_autodelete" options.</li>
        <li>Temporary files (eg. downloaded files) will be deleted upon completion of dotNetInstaller.</li>
        <li>Added /Log command-line option and "log_enabled" configuration file parameter that
            enables logging for dotNetInstaller and all MSI components executed.</li>
        <li>Added /LogFile &lt;path\filename&gt; command-line option and a log_file configuration
            file parameter to specify the resulting full path to the log filename for the dotNetInstaller
            itself.</li>
        <li>Added application version and operating system header to the log output as well
            as a timestamp in front of every log entry.</li>
        <li>Added #CABPATH variable that can be used in path settings.</li>
        <li>Added #GUID variable that represents a unique GUID across a single instance of dotNetInstaller.</li>
        <li>Added an MSBuild script that centrally versions, builds and packages dotNetInstaller
            into target/Debug|Release, including a sample.</li>
        <li>Added a combined Visual Studio solution, dni.sln with automatic versioning (reqiures
            <a href="http://msbuildtasks.tigris.org/">MSBuild Community Tasks</a>); the major
            and minor version number can be incremented in dni.proj, the build number is the
            latest SVN revision and the release number is a timestamp.</li>
        <li>Added features to specify additional binary information, including copyright or
            company name, specifically "file_version" and "product_version" configuration attributes,
            as well as free-formed string attributes, using <a href="http://www.codeproject.com/KB/library/ResourceLib.aspx">
                ResourceLib</a>.</li>
        <li>Added a component "required" option; a required component cannot be de-selected
            in the Advanced tab and complete_command is only executed when all reqiured components
            have been installed.</li>
        <li>Added /CompleteCommandArgs "value" to dotNetInstaller.exe to pass additional parameters
            to "complete_command" and "complete_command_silent".</li>
        <li>Added horizontal scrollbars in component lists that can't fit all the text in.</li>
    </ul>
    <h3>
        1.3.3.0 (3/19/2007)</h3>
    <ul>
        <li>dotNetInstaller can now recognize Windows Vista (Thanks to Rennie Petersen)</li>
        <li>Included .NET 2 components on the InstallerEditor templates (Thanks to Rennie Petersen)</li>
        <li>Added OS filter functionality. You can now specify on which OS your setup will be
            running.</li>
        <li>In the complete_command you can now use environment variables (e.g. %Temp%)</li>
        <li>A template for german language is available in the InstallerEditor\templates\ folder
            (Thanks to Rainer Halanek for the translation)</li>
        <li>Converted the projects to Visual Studio 2005 format.</li>
        <li>InstallerEditor runs now on top of .NET Framework 2.0.</li>
        <li>For a registry search the root key is now selectable. (Thanks to Steve)</li>
        <li>For a registry search you can check if a registry field for a registry key exists.
            (Thanks to Steve)</li>
        <li>For a registry search you can check if a registry value contains a string. (Thanks
            to James Muchmore)</li>
        <li>For a registry search you can now check multiline string values (REG_MULTI_SZ).
            (Thanks to James Muchmore)</li>
        <li>Removed the old "Component Wizard" command of the InstallerEditor, now replaced
            by the wizard that read from the template file (components.xml)</li>
        <li>Added to subversion a "Samples" folder with the structure of the SupportFiles folder
            and one sample application</li>
    </ul>
    <h3>
        1.2.2.0 (8/3/2004)</h3>
    <ul>
        <li>New article section: <a href="#Samples">Samples</a>.</li>
        <li>Changed the timeout of the download to 20 seconds.</li>
        <li>Fixed a bug when loading configuration file from the resources, used by the "Build
            Exe" features.</li>
        <li>Added Win2000 Sp4 at "Component Wizard" list.</li>
        <li>Added Win2000 Sp3 as requirements for Jet 4 Sp8.</li>
        <li>Changed the samples with the service pack 4 of Win 2000 and used the auto download
            features with the Web Setup Sample.</li>
        <li>Updated Sample directory in the zip file.</li>
        <li>Fixed a bug when reading and writing unicode strings using RegQueryValueEx and RegSetValueEx
            (used for the autorun fetures and registry features)</li>
        <li>Changed utility function FileExistsCustom using GetFileAttributes. This seems to
            be the best way to check if a file exist.</li>
        <li>Added a new Component Wizard to InstallerEditor (Component Wizard 2) with the Italian
            version of the Components and an easier customization. The wizard use a resource
            file (components.xml) to populate the available components so you can add you custom
            component using this file. This change has no impact on the final configuration
            file.</li>
        <li>Added NT4 Sp6 High Encryption, NT4 Sp6 Standard Encryption and MDAC 2.8 Italian
            to the directory of SupportFiles.</li>
        <li>The configuration XML structure is the same as the previous release, you can use
            the same configuration files.</li>
    </ul>
    <h3>
        1.2.0.0 (6/24/2004)</h3>
    <ul>
        <li>New article sections: "Multilanguage features", "1.1.0.2 to 1.2.0.0 changes of XML
            file", "Deploy dotNetInstaller" and "System Requirements Notes".</li>
        <li>Improved dotNetInstaller userinterface for a better interaction and a more customizable
            setup for advanced users.</li>
        <li>Changed structure of XML configuration file for new features, you can use the Installer
            Editor to update your old configuration files.</li>
        <li>Before using the TEMP directory check if the directory exist and if not exist try
            to create it (see GetTempPath function on MSDN help).</li>
        <li>Added a progress bar control when installing components, thanks to Peter Mares for
            <a href="http://www.codeproject.com/miscctrl/kcbusyprogress.asp">A new progress bar
                for all occassions..."</a></li>
        <li>Now the editor can use a list of template files to customize the language of the
            intstaller.</li>
        <li>Added a customizable link at the bottom of the main dialog, thanks to Franz Wong
            for <a href="http://www.codeguru.com/Cpp/controls/staticctrl/article.php/c5801/">Simple
                Hyperlink Static Control</a>.</li>
        <li>Added full UTF-8 support fot the configuration file, the editor and the installer.
        </li>
        <li>Now dotNetInstaller is compiled using UNICODE for full compatibility with non english
            language. For Win 9x and ME now you must distribuite with dotNetInstaller.exe the
            Microsoft Layer for Unicode, unicows.dll.</li>
        <li>Now I use TinyXml to parse XML file for best compatibility on UTF-8 and XML standards.
        </li>
        <li>Added enum for Windows Xp Sp2 (winXPsp2 = 82).</li>
        <li>Added "/log" command line parameters for dotNetInstaller to enable a basic log file
            during installation.</li>
        <li>Now using auto_close_if_installed attribute and complete_command you can close automatically
            dotNetInstaller when all the components are installed and execute an optional commands.
        </li>
        <li>Updated the structure of the SupportFiles directory and added MDAC 2.8, Jet4 Sp8.
        </li>
        <li>Removed Y2K Update for Windows 98 in the list of requirements components.</li>
        <li>Improved InstallerEditor and added wizard for MDAC 2.8, Internet Explorer 6Sp1,
            Jet 4 Sp8 and NT4 Sp6a.</li>
        <li>Changed some steps of the tutorials to add unicows.dll and to zip the web setup.
        </li>
        <li>Fixed command line parameters for MDAC installation quiet mode.</li>
        <li>Changed the tutorials for 'How to create a Web Setup to install .NET Framework and
            your msi setup'.</li>
    </ul>
    <h3>
        1.1.0.2 (1/6/2004)</h3>
    <ul>
        <li>Removed SourceCode control from the projects.</li>
    </ul>
    <h3>
        1.1.0.2 (1/2/2004)</h3>
    <ul>
        <li>Added ability to download required components from the web.</li>
        <li>Added #TEMPPATH path variable.</li>
        <li>Editor to create and modify XML configuration file.</li>
        <li>Many changes to the XML structure, old files are not compatible.</li>
        <li>Fixed a bug on the function that reads the operating system LCID.</li>
    </ul>
    <h3>
        1.0.8.0 (11/5/2003)</h3>
    <ul>
        <li>Added #WINDOWSPATH path constant.</li>
    </ul>
    <h3>
        1.0.7.0 (9/28/2003)</h3>
    <ul>
        <li>Bug fixed on MDAC and JET components configuration file (registry check to REG_SZ
            and language support for JET).</li>
    </ul>
    <h3>
        1.0.7.0 (9/27/2003)</h3>
    <ul>
        <li>First public release.</li>
    </ul>
</body>
</html>
